home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / avr32 / include / asm / bug.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.6 KB  |  74 lines

  1. /*
  2.  * Copyright (C) 2006 Atmel Corporation
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License version 2 as
  6.  * published by the Free Software Foundation.
  7.  */
  8. #ifndef __ASM_AVR32_BUG_H
  9. #define __ASM_AVR32_BUG_H
  10.  
  11. #ifdef CONFIG_BUG
  12.  
  13. /*
  14.  * According to our Chief Architect, this compact opcode is very
  15.  * unlikely to ever be implemented.
  16.  */
  17. #define AVR32_BUG_OPCODE    0x5df0
  18.  
  19. #ifdef CONFIG_DEBUG_BUGVERBOSE
  20.  
  21. #define _BUG_OR_WARN(flags)                        \
  22.     asm volatile(                            \
  23.         "1:    .hword    %0\n"                    \
  24.         "    .section __bug_table,\"a\",@progbits\n"        \
  25.         "2:    .long    1b\n"                    \
  26.         "    .long    %1\n"                    \
  27.         "    .short    %2\n"                    \
  28.         "    .short    %3\n"                    \
  29.         "    .org    2b + %4\n"                \
  30.         "    .previous"                    \
  31.         :                            \
  32.         : "i"(AVR32_BUG_OPCODE), "i"(__FILE__),            \
  33.           "i"(__LINE__), "i"(flags),                \
  34.           "i"(sizeof(struct bug_entry)))
  35.  
  36. #else
  37.  
  38. #define _BUG_OR_WARN(flags)                        \
  39.     asm volatile(                            \
  40.         "1:    .hword    %0\n"                    \
  41.         "    .section __bug_table,\"a\",@progbits\n"        \
  42.         "2:    .long    1b\n"                    \
  43.         "    .short    %1\n"                    \
  44.         "    .org    2b + %2\n"                \
  45.         "    .previous"                    \
  46.         :                            \
  47.         : "i"(AVR32_BUG_OPCODE), "i"(flags),            \
  48.           "i"(sizeof(struct bug_entry)))
  49.  
  50. #endif /* CONFIG_DEBUG_BUGVERBOSE */
  51.  
  52. #define BUG()                                \
  53.     do {                                \
  54.         _BUG_OR_WARN(0);                    \
  55.         for (;;);                        \
  56.     } while (0)
  57.  
  58. #define WARN_ON(condition)                            \
  59.     ({                                \
  60.         int __ret_warn_on = !!(condition);            \
  61.         if (unlikely(__ret_warn_on))                \
  62.             _BUG_OR_WARN(BUGFLAG_WARNING);            \
  63.         unlikely(__ret_warn_on);                \
  64.     })
  65.  
  66. #define HAVE_ARCH_BUG
  67. #define HAVE_ARCH_WARN_ON
  68.  
  69. #endif /* CONFIG_BUG */
  70.  
  71. #include <asm-generic/bug.h>
  72.  
  73. #endif /* __ASM_AVR32_BUG_H */
  74.